package com.xltq.service.impl;

import com.xltq.dao.IUserDao;
import com.xltq.dao.impl.IUserDaoImpl;
import com.xltq.entity.User;
import com.xltq.service.IUserService;
import com.xltq.utils.Constants;
import com.xltq.utils.EmailUtils;
import com.xltq.utils.MD5Utils;

import java.util.Objects;

public class IUserServiceImpl implements IUserService {
    IUserDao iUserDao = new IUserDaoImpl();

    /**
     * 检查用户名是否存在
     *
     * @param username 用户名
     * @return true 就是存在 false 就是不存在
     * @throws Exception 抛出异常
     */
    @Override
    public boolean checkeUser(String username) throws Exception {
        User user = iUserDao.queryUserByName(username);
        return Objects.nonNull(user);
    }

    /**
     * 用户注册用户逻辑
     *
     * @param user 封装着用户注册的信息
     * @return dao层操作之后收到影响的行数
     * @throws Exception 抛出异常
     */
    @Override
    public int registerUser(User user) throws Exception {
        int rows = iUserDao.insertUser(user);
        EmailUtils.sendEmail(user);
        return rows;
    }

    /**
     * 激活方法
     *
     * @param code 根据激活码进行激活
     * @return 三个状态 0激活失败 1激活成功 2,已经激活
     * @throws Exception 抛出异常
     */
    @Override
    public int activeUser(String code) throws Exception {
        User user = iUserDao.queryUserByCode(code);
        // 如果用户为空(激活码查询出来的是一个空对象)
        if (Objects.isNull(user)) {
            return Constants.ACTIVE_FAIL;
        }
        //2, 判断当前对象是否被激活
        if (user.getUstatus().equals(Constants.USER_ACTIVE)) {
            return Constants.ACTIVE_ALREADY;
        }

        int rows = iUserDao.updateStatusByUid(user.getUid());
        //判断受影响的函数
        if (rows > 0) {
            return Constants.ACTIVE_ALREADY;
        }
        return Constants.ACTIVE_FAIL;
    }

    /**
     * 通过用户名和密码进行查询
     *
     * @param username 用户名
     * @param password 密码
     * @return 查询到User集合
     * @throws Exception 定义抛出异常
     */
    @Override
    public User login(String username, String password) throws Exception {
        return iUserDao.login(username, MD5Utils.md5(password));
    }
}
